package com.davidlife.javase.datatype;

import java.util.InputMismatchException;
import java.util.Scanner;

public class BreakWithLabel {

	public static void main(String[] args) {
		//breakWithLabel();
		continueWithLabel();
		//othersWithLabel();
	}

	public static void breakWithLabel() {
		Scanner in = new Scanner(System.in);
		int n = 1;
		
		//标签必须放在希望跳出的最外层循环之前，并且必须紧跟一个冒号
		read_data:
		while(true) {
			System.out.println("请务必输入正数且最多玩5次哦：");
			for(int i=0; i<5; i++) {
				n = in.nextInt();
				//只要输入负数直接跳到最外层循环，结束程序
				if(n <= 0) break read_data;
				System.out.println("玩了 " + (i+1) + " 次了哦。你输入了：" + n);
			}
			System.out.println("恭喜你通关，还想在玩一次吗？Y/N");
			String str = in.next();
			if(!"Y".equals(str)) break;
		}
		//一般使用带标签的break语句，需要检测循环是正常结束，还是由break跳出。
		if(n <= 0) {
			System.out.println("Game Over! Since you input a negative number.");
		} else {
			System.out.println("游戏结束!");
		}
		in.close();
	}
	
	public static void continueWithLabel() {
		Scanner in = new Scanner(System.in);
		int n = 1;
		
		//标签必须放在希望跳出的最外层循环之前，并且必须紧跟一个冒号
		read_data:
		while(true) {
			System.out.println("请务必输入正数：");
			
			for(int i=0; i<5; i++) {
				try {
					n = in.nextInt();
				} catch (InputMismatchException e) {
					//带标签的continue语句s
					break read_data;
				}
				
				//带标签的continue语句
				if(n <= 0) continue read_data;
				
				System.out.println("玩了 " + (i+1) + " 次了哦。你输入了：" + n);
			}
		}
		System.out.println("Game Over !");
		in.close();
	}
	
	//事实上，可以将标签应用到任何语句中，甚至可以应用到if语句或者块语句中。但不提倡使用这种方式。
	public static void othersWithLabel() {
		Scanner in = new Scanner(System.in);
		read_data:
		{
			System.out.println("Before sentence...");
			if(in.nextInt() < 0) break read_data;
			System.out.println("After sentence...");
		}
		System.out.println("End !");
		in.close();
	}
}
